package com.xq.linkedlist;

import java.util.ArrayList;
import java.util.Stack;

/**
 * @author jltxseo
 *         Created by junlintianxia on 2017/07/15.
 */

public class LinkedListAlgorithm {

    /**
     *
     * 输入一个链表，从尾到头打印链表每个节点的值。
     * 思路：根据Stack的特点 后进先出（LIFO），可以先遍历链表，把值存入堆栈中。
     * 然后新建一个链表对象做为返回，再把堆栈中的值依次拿出来存入新链表中, 就实现了倒序。
     * @param listNode
     * @return
     */
    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
        Stack<Integer> stack = new Stack<>();
        while (listNode != null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        ArrayList<Integer> list = new ArrayList<>();
        while (!stack.empty()){
            list.add(stack.pop());
        }
        return list;
    }

    private class ListNode{
        int val;
        ListNode next = null;

        public ListNode(int val) {
            this.val = val;
        }
    }
}
